#include <stdio.h>

// 这段代码既可以在C语言环境下编译也可以在C++环境下编译
#ifdef __cplusplus
    #include <cerrno>
    #include <cstring>
    using std::strerror;
#else
    #include <errno.h>
    #include <string.h>
#endif

int main() 
{
    FILE *file = fopen("nonexistent.txt", "r");
    if (file == NULL) 
    {
        // 函数失败后检查errno
        printf("错误信息为%d号，其内容为： %s\n", errno,strerror(errno));
        //errno是一个全局整型变量，用于存储系统调用和库函数执行失败时的错误代码。当函数调用失败时，它会设置errno为一个特定的值来指示错误类型。
        //strerror() - 将错误码转换为可读字符串
        //perror() - 直接打印错误信息
        //errno是线程安全的
        perror("fopen failed");  // 另一种输出错误信息的方式
    }
    //errno的使用场景
    //系统调用失败时 - open, read, write, fork等
    //标准库函数失败时 - fopen, malloc, strtol等
    //数学函数错误时 - 如除零错误、数值溢出等
    //网络编程错误 - socket, connect, bind等
    return 0;
}

